package uds_tb

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"server/apps/uds/uds_fld"
	"server/dbtools/xmysql"
	"server/global"
	"server/model/common/request"
	"server/model/common/response"
)

type UdsTbApi struct {
}

var udsTbService = UdsTbService{}
var udsFldService = uds_fld.UdsFldService{}


func (udsTbApi *UdsTbApi) CreateUdsTb(c *gin.Context) {
	global.Logger.Info("创建udsTb&flds")
	var udsTb UdsTb
	err := c.ShouldBindJSON(&udsTb)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	udsDb := global.UdsDB
	tbIsExist, err := xmysql.MysqlTbExist(udsDb, udsTb.UdsTbName)
	if err != nil {
		msg := fmt.Sprintf("获取表名信息失败:%v", err)
		global.Logger.Error(msg)
		response.FailWithMessage(msg, c)
		return
	}
	if tbIsExist == true {
		msg := fmt.Sprintf("UdsTb表名%s已经存在", udsTb.UdsTbName)
		global.Logger.Error(msg)
		response.FailWithMessage(msg, c)
		return
	}
	udsTb.CreateFileType = "自定义"
	if err := udsTbService.CreateUdsTb(&udsTb); err != nil {
		global.Logger.Error("创建udsTb失败!", zap.Error(err))
		response.FailWithMessage("创建udsTb失败", c)
		return
	}
	for _, oneFld := range udsTb.UdsFlds {
		oneFld.UdsTbId = udsTb.ID
		if err := udsFldService.CreateUdsFld(&oneFld); err != nil {
			global.Logger.Error("创建udsFld失败!", zap.Error(err))
			response.FailWithMessage("创建udsFld失败", c)
			return
		}
	}
	err = udsTb.CreateUdsTb()
	if err != nil {
		response.FailWithMessage(fmt.Sprintf("创建自定义表失败,err:%v", err), c)
		return
	}
	response.OkWithMessage("创建自定义表成功", c)

}


func (udsTbApi *UdsTbApi) DeleteUdsTb(c *gin.Context) {
	var udsTb UdsTb
	err := c.ShouldBindJSON(&udsTb)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	if err := udsTbService.DeleteUdsTb(udsTb); err != nil {
		global.Logger.Error("删除失败!", zap.Error(err))
		response.FailWithMessage("删除失败", c)
	} else {
		response.OkWithMessage("删除成功", c)
	}
}


func (udsTbApi *UdsTbApi) DeleteUdsTbByIds(c *gin.Context) {
	var IDS request.IdsReq
	err := c.ShouldBindJSON(&IDS)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	if err := udsTbService.DeleteUdsTbByIds(IDS); err != nil {
		global.Logger.Error("批量删除失败!", zap.Error(err))
		response.FailWithMessage("批量删除失败", c)
	} else {
		response.OkWithMessage("批量删除成功", c)
	}
}


func (udsTbApi *UdsTbApi) UpdateUdsTb(c *gin.Context) {
	var udsTb UdsTb
	err := c.ShouldBindJSON(&udsTb)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	if err := udsTb.UpdateFlds(); err != nil {
		msg := fmt.Sprintf("更新udsTb表字段失败,err:%v", err)
		global.Logger.Error(msg)
		response.FailWithMessage(msg, c)
		return
	}
	udsTb.CreateFileType = "自定义"
	if err := udsTbService.UpdateUdsTb(&udsTb); err != nil {
		msg := fmt.Sprintf("更新udsTb失败,err:%v", err)
		global.Logger.Error(msg)
		response.FailWithMessage(msg, c)
		return
	}
	if err := udsTbService.DeleteUdsFldByNotIn(&udsTb); err != nil {
		msg := fmt.Sprintf("删除udsFld失败,err:%v", err)
		global.Logger.Error(msg)
		response.FailWithMessage(msg, c)
		return
	}
	response.OkWithMessage("更新自定义表成功", c)

}


func (udsTbApi *UdsTbApi) FindUdsTb(c *gin.Context) {
	var udsTb UdsTb
	err := c.ShouldBindQuery(&udsTb)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	reudsTb, err := udsTbService.GetUdsTbById(udsTb.ID)
	if err != nil {
		global.Logger.Error("查询失败!", zap.Error(err))
		response.FailWithMessage("查询失败", c)
	}
	reudsFlds, err := udsFldService.GetUdsFldByCol("udsTbId", udsTb.ID)
	if err != nil {
		global.Logger.Error("查询失败!", zap.Error(err))
		response.FailWithMessage("查询失败", c)
	}
	reudsTb.UdsFlds = reudsFlds
	response.OkWithData(gin.H{"reudsTb": reudsTb}, c)
}


func (udsTbApi *UdsTbApi) GetUdsTbList(c *gin.Context) {
	var pageInfo UdsTbSearch
	err := c.ShouldBindQuery(&pageInfo)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	if list, total, err := udsTbService.GetUdsTbInfoList(pageInfo); err != nil {
		global.Logger.Error("获取失败!", zap.Error(err))
		response.FailWithMessage("获取失败", c)
	} else {
		response.OkWithDetailed(response.PageResult{
			List:     list,
			Total:    total,
			Page:     pageInfo.Page,
			PageSize: pageInfo.PageSize,
		}, "获取成功", c)
	}
}


func (udsTbApi *UdsTbApi) GetAllUdsTbs(c *gin.Context) {
	udsTb, err := udsTbService.GetAllUdsTbs()
	if err != nil {
		global.Logger.Error("获取失败!", zap.Error(err))
		response.FailWithMessage("获取失败", c)
	} else {
		response.OkWithDetailed(gin.H{"udsTb": udsTb}, "获取成功", c)
	}
}


func (udsTbApi *UdsTbApi) GetUdsTb(c *gin.Context) {
	udsTb, err := udsTbService.GetUdsTb()
	if err != nil {
		global.Logger.Error("获取失败!", zap.Error(err))
		response.FailWithMessage("获取失败", c)
	} else {
		response.OkWithDetailed(gin.H{"udsTb": udsTb}, "获取成功", c)
	}
}


func (udsTbApi *UdsTbApi) InitUdsTb(c *gin.Context) {

	response.FailWithMessage("获取初始化数据失败", c)
}
